Like any other development process for a complex design, it is important to ensure that the process for developing software involves adequate testing and verification of the performance and functionality of the software. For software in particular, it is quite common during the development process to discover errors or “bugs” in the programming code. Many different types of errors may occur in a software program. For example, such errors can be syntax errors, semantic errors, or logic errors. Because the semantic and logic errors can occur even if the coding obeys the language (syntax) rules, semantic and logic errors cannot typically be identified by the compiler or interpreter. Therefore, a software developer will often need to engage in debugging activities in one or more debugging modes to address errors that are semantic or logic in nature. In some cases, a developer or a programmer may wish to perform tracing or event logging at various points in time to acquire information about the execution or run (hereinafter run) of a software program. Furthermore, a developer or a programmer may wish to perform runtime checking to check for errors, such as arithmetic overflow or invalid type casts, at runtime. On the other hand, a verification environment may have different modes such as the compiled and optimized mode, the debug compiled and optimized mode, the debug compiled and non-optimized mode, the interpreted mode, etc. In other words, a developer or a programmer may wish to switch among different modes for various purposes.
Therefore, what are needed are a method, a system, and an article of manufacture for using multiple modes during execution of a program.